-- @nsURI MAST2=http://mast.unican.es/ecoremast/Mast2 -- @nsURI XML=http://www.eclipse.org/am3/2007/XML -- Header section module MAST2_to_XML; create OUTmodel : XML from INmodel : MAST2; -- ***************************************************************************** -- ************************* ATTRIBUTE helpers ********************************* -- ***************************************************************************** -- ***************************************************************************** -- ************************* Functional HELPERS ******************************** -- ***************************************************************************** --- ----------- --- This helper... --- ----------- helper context Boolean def : bool2Assertion : String = if self = true then 'YES' else 'NO' endif; -- ***************************************************************************** -- ************************* MATCHED RULES ************************************* -- ***************************************************************************** --- --------- --- This rule... --- --------- rule Mast_Model { from input : MAST2!Mast_Model to output1 : XML!Root ( name <- 'mast_mdl:MAST_MODEL', children <- output2, children <- output3, children <- output4, children <- output5, children <- output6, children <- input.Element_List ), output2 : XML!Attribute ( name <- 'xmlns:mast_mdl', value <- 'http://mast.unican.es/xmlmast/model', parent <- output1 ), output3 : XML!Attribute ( name <- 'xmlns:xsi', value <- 'http://www.w3.org/2001/XMLSchema-instance', parent <- output1 ), output4 : XML!Attribute ( name <- 'xsi:schemaLocation', value <- 'http://mast.unican.es/xmlmast/model ../Schemas/Mast2_Model.xsd', parent <- output1 ), output5 : XML!Attribute ( name <- 'Model_Name', value <- input.name, parent <- output1 ), output6 : XML!Attribute ( name <- 'Model_Date', value <- input.Date, parent <- output1 ) do { if (not input.System_PiP_Behavior.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('System_PiP_Behaviour', input.System_PiP_Behavior.toString(), output1); if (not input.Event_Queueing_Policy.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Step_Queueing_Policy', input.Event_Queueing_Policy.toString(), output1); } } -- -------------- -- TIMING OBJECTS -- -------------- --- --------- --- This rule... --- --------- rule Clock_Synchronization_Object { from input : MAST2!Clock_Synchronization_Object to output : XML!Element ( name <- 'mast_mdl:Clock_Synchronization_Object' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (not input.Accuracy.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Precision', input.Accuracy.toString(), output); } } --- --------- --- This rule... --- --------- rule Alarm_Clock { from input : MAST2!Alarm_Clock to output : XML!Element ( name <- 'mast_mdl:Alarm_Clock' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Max_Overhead <> 0.0) -- if (not input.Max_Overhead.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Overhead', input.Max_Overhead.toString(), output); -- if (input.Avg_Overhead <> 0.0) -- if (not input.Avg_Overhead.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Overhead', input.Avg_Overhead.toString(), output); -- if (input.Min_Overhead <> 0.0) -- if (not input.Min_Overhead.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Min_Overhead', input.Min_Overhead.toString(), output); -- if (not input.Is_Locally_Synchronized.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Is_Locally_Synchronized', input.Is_Locally_Synchronized.bool2Assertion, output); -- if (not input.Accuracy.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Precision', input.Accuracy.toString(), output); } } --- --------- --- This rule... --- --------- rule Ticker { from input : MAST2!Ticker to output : XML!Element ( name <- 'mast_mdl:Ticker' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Max_Overhead <> 0.0) -- if (not input.Max_Overhead.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Overhead', input.Max_Overhead.toString(), output); -- if (input.Avg_Overhead <> 0.0) -- if (not input.Avg_Overhead.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Overhead', input.Avg_Overhead.toString(), output); -- if (input.Min_Overhead <> 0.0) -- if (not input.Min_Overhead.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Min_Overhead', input.Min_Overhead.toString(), output); -- if (not input.Is_Locally_Synchronized.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Is_Locally_Synchronized', input.Is_Locally_Synchronized.bool2Assertion, output); -- if (not input.Accuracy.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Precision', input.Accuracy.toString(), output); -- if (not input.Period.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Period', input.Period.toString(), output); } } -- -------------------- -- PROCESSING RESOURCES -- -------------------- --- --------- --- This rule... --- --------- rule Regular_Processor { from input : MAST2!Regular_Processor to output : XML!Element ( name <- 'mast_mdl:Regular_Processor' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Speed_Factor <> 1.0) -- if (not input.Speed_Factor.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Speed_Factor', input.Speed_Factor.toString(), output); -- if (input.Max_Interrupt_Priority <> 32767) -- if (not input.Max_Interrupt_Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Interrupt_Priority', input.Max_Interrupt_Priority.toString(), output); -- if (input.Min_Interrupt_Priority <> 1) -- if (not input.Min_Interrupt_Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Min_Interrupt_Priority', input.Min_Interrupt_Priority.toString(), output); -- if (input.Worst_ISR_Switch <> 0.0) -- if (not input.Worst_ISR_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Worst_ISR_Switch', input.Worst_ISR_Switch.toString(), output); -- if (input.Avg_ISR_Switch <> 0.0) -- if (not input.Avg_ISR_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_ISR_Switch', input.Avg_ISR_Switch.toString(), output); -- if (input.Best_ISR_Switch <> 0.0) -- if (not input.Best_ISR_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Best_ISR_Switch', input.Best_ISR_Switch.toString(), output); if (not input.Synchronization_Source.oclIsUndefined()) { thisModule.CreateXMLattr_StringValue('Synchronization_Source', input.Synchronization_Source.name, output); } if (not input.System_Timer.oclIsUndefined()) { thisModule.CreateXMLattr_StringValue('System_Timer', input.System_Timer.name, output); } for (timer in input.Timer_List) { thisModule.ContributeXMLelem_OfType_Model_Elem_Ref('Timer', output, timer.name); } } } --- --------- --- This rule... --- --------- rule Packet_Based_Network { from input : MAST2!Packet_Based_Network to output : XML!Element ( name <- 'mast_mdl:Packet_Based_Network', -- parent <- children <- input.Driver_List ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Speed_Factor <> 1.0) -- if (not input.Speed_Factor.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Speed_Factor', input.Speed_Factor.toString(), output); -- if (input.Throughput <> 0) -- if (not input.Throughput.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Throughput', input.Throughput.toString(), output); -- if (not input.Transmission_Kind.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Transmission_Kind', input.Transmission_Kind.toString(), output); -- if (input.Max_Blocking <> 0.0) -- if (not input.Max_Blocking.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Blocking', input.Max_Blocking.toString(), output); -- if (input.Max_Packet_Size <> 2147483647) -- if (not input.Max_Packet_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Packet_Size', input.Max_Packet_Size.toString(), output); -- if (input.Min_Packet_Size <> 2147483647) -- if (not input.Min_Packet_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Min_Packet_Size', input.Min_Packet_Size.toString(), output); if (not input.Synchronization_Source.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Synchronization_Source', input.Synchronization_Source.name, output); } } --- --------- --- This rule... --- --------- rule RTEP_Network { from input : MAST2!RTEP_Network to output : XML!Element ( name <- 'mast_mdl:RTEP_Network', -- parent <- children <- input.Driver_List ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Speed_Factor <> 1.0) -- if (not input.Speed_Factor.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Speed_Factor', input.Speed_Factor.toString(), output); -- if (input.Throughput <> 0) -- if (not input.Throughput.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Throughput', input.Throughput.toString(), output); -- if (not input.Transmission_Kind.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Transmission_Kind', input.Transmission_Kind.toString(), output); -- if (input.Max_Blocking <> 0.0) -- if (not input.Max_Blocking.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Blocking', input.Max_Blocking.toString(), output); -- if (input.Max_Packet_Size <> 2147483647) -- if (not input.Max_Packet_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Packet_Size', input.Max_Packet_Size.toString(), output); -- if (input.Min_Packet_Size <> 2147483647) -- if (not input.Min_Packet_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Min_Packet_Size', input.Min_Packet_Size.toString(), output); -- if (not input.Number_Of_Stations.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Number_Of_Stations', input.Number_Of_Stations.toString(), output); -- if (not input.Token_Delay.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Token_Delay', input.Token_Delay.toString(), output); -- if (not input.Failure_Timeout.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Failure_Timeout', input.Failure_Timeout.toString(), output); -- if (not input.Token_Transmission_Retries.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Token_Transmission_Retries', input.Token_Transmission_Retries.toString(), output); -- if (not input.Packet_Transmission_Retries.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Transmission_Retries', input.Packet_Transmission_Retries.toString(), output); -- if (not input.Arbitration_Token_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Arbitration_Token_Size', input.Arbitration_Token_Size.toString(), output); -- if (not input.Transmit_Token_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Transmitt_Token_Size', input.Transmit_Token_Size.toString(), output); if (not input.Synchronization_Source.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Synchronization_Source', input.Synchronization_Source.name, output); } } --- --------- --- This rule... --- --------- rule AFDX_Link { from input : MAST2!AFDX_Link to output : XML!Element ( name <- 'mast_mdl:AFDX_Link', -- parent <- children <- input.Driver_List ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); thisModule.CreateXMLattr_StringValue('Ethernet_Overhead', '180', output); thisModule.CreateXMLattr_StringValue('Protocol_Overhead', '376', output); -- if (input.Speed_Factor <> 1.0) -- if (not input.Speed_Factor.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Speed_Factor', input.Speed_Factor.toString(), output); -- if (input.Throughput <> 0) -- if (not input.Throughput.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Throughput', input.Throughput.toString(), output); -- if (input.Max_Packet_Size <> 2147483647) -- if (not input.Max_Packet_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Packet_Size', input.Max_Packet_Size.toString(), output); -- if (input.Min_Packet_Size <> 2147483647) -- if (not input.Min_Packet_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Min_Packet_Size', input.Min_Packet_Size.toString(), output); -- if (input.Max_HW_Tx_Latency <> thisModule.timeMax) thisModule.CreateXMLattr_StringValue('Max_HW_Tx_Latency', input.Max_HW_Tx_Latency.toString(), output); -- if (input.Avg_HW_Tx_Latency <> thisModule.timeMax) thisModule.CreateXMLattr_StringValue('Avg_HW_Tx_Latency', input.Avg_HW_Tx_Latency.toString(), output); -- if (input.Min_HW_Tx_Latency <> thisModule.timeMax) thisModule.CreateXMLattr_StringValue('Min_HW_Tx_Latency', input.Min_HW_Tx_Latency.toString(), output); -- if (input.Max_HW_Rx_Latency <> thisModule.timeMax) thisModule.CreateXMLattr_StringValue('Max_HW_Rx_Latency', input.Max_HW_Rx_Latency.toString(), output); -- if (input.Avg_HW_Rx_Latency <> thisModule.timeMax) thisModule.CreateXMLattr_StringValue('Avg_HW_Rx_Latency', input.Avg_HW_Rx_Latency.toString(), output); -- if (input.Min_HW_Rx_Latency <> thisModule.timeMax) thisModule.CreateXMLattr_StringValue('Min_HW_Rx_Latency', input.Min_HW_Rx_Latency.toString(), output); if (not input.Synchronization_Source.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Synchronization_Source', input.Synchronization_Source.name, output); } } --- --------- --- This rule... --- --------- rule Regular_Switch { from input : MAST2!Regular_Switch to output : XML!Element ( name <- 'mast_mdl:Regular_Switch' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Speed_Factor <> 1.0) -- if (not input.Speed_Factor.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Speed_Factor', input.Speed_Factor.toString(), output); -- if (input.Max_Fixed_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Fixed_Fork_Latency', input.Max_Fixed_Fork_Latency.toString(), output); -- if (input.Avg_Fixed_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Fixed_Fork_Latency', input.Avg_Fixed_Fork_Latency.toString(), output); -- if (input.Min_Fixed_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Fixed_Fork_Latency', input.Min_Fixed_Fork_Latency.toString(), output); -- if (input.Max_Variable_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Variable_Fork_Latency', input.Max_Variable_Fork_Latency.toString(), output); -- if (input.Avg_Variable_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Variable_Fork_Latency', input.Avg_Variable_Fork_Latency.toString(), output); -- if (input.Min_Variable_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Variable_Fork_Latency', input.Min_Variable_Fork_Latency.toString(), output); -- if (input.Max_Delivery_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Delivery_Latency', input.Max_Delivery_Latency.toString(), output); -- if (input.Avg_Delivery_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Delivery_Latency', input.Avg_Delivery_Latency.toString(), output); -- if (input.Min_Delivery_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Delivery_Latency', input.Min_Delivery_Latency.toString(), output); if (not input.Synchronization_Source.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Synchronization_Source', input.Synchronization_Source.name, output); } } --- --------- --- This rule... --- --------- rule AFDX_Switch { from input : MAST2!AFDX_Switch to output : XML!Element ( name <- 'mast_mdl:AFDX_Switch' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Speed_Factor <> 1.0) -- if (not input.Speed_Factor.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Speed_Factor', input.Speed_Factor.toString(), output); -- if (input.Max_Fixed_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Fixed_Fork_Latency', input.Max_Fixed_Fork_Latency.toString(), output); -- if (input.Avg_Fixed_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Fixed_Fork_Latency', input.Avg_Fixed_Fork_Latency.toString(), output); -- if (input.Min_Fixed_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Fixed_Fork_Latency', input.Min_Fixed_Fork_Latency.toString(), output); -- if (input.Max_Variable_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Variable_Fork_Latency', input.Max_Variable_Fork_Latency.toString(), output); -- if (input.Avg_Variable_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Variable_Fork_Latency', input.Avg_Variable_Fork_Latency.toString(), output); -- if (input.Min_Variable_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Variable_Fork_Latency', input.Min_Variable_Fork_Latency.toString(), output); -- if (input.Max_Delivery_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Delivery_Latency', input.Max_Delivery_Latency.toString(), output); -- if (input.Avg_Delivery_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Delivery_Latency', input.Avg_Delivery_Latency.toString(), output); -- if (input.Min_Delivery_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Delivery_Latency', input.Min_Delivery_Latency.toString(), output); if (not input.Synchronization_Source.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Synchronization_Source', input.Synchronization_Source.name, output); } } --- --------- --- This rule... --- --------- rule Regular_Router { from input : MAST2!Regular_Router to output : XML!Element ( name <- 'mast_mdl:Regular_Router' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Speed_Factor <> 1.0) -- if (not input.Speed_Factor.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Speed_Factor', input.Speed_Factor.toString(), output); -- if (input.Max_Fixed_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Fixed_Fork_Latency', input.Max_Fixed_Fork_Latency.toString(), output); -- if (input.Avg_Fixed_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Fixed_Fork_Latency', input.Avg_Fixed_Fork_Latency.toString(), output); -- if (input.Min_Fixed_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Fixed_Fork_Latency', input.Min_Fixed_Fork_Latency.toString(), output); -- if (input.Max_Variable_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Variable_Fork_Latency', input.Max_Variable_Fork_Latency.toString(), output); -- if (input.Avg_Variable_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Variable_Fork_Latency', input.Avg_Variable_Fork_Latency.toString(), output); -- if (input.Min_Variable_Fork_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Variable_Fork_Latency', input.Min_Variable_Fork_Latency.toString(), output); -- if (input.Max_Delivery_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Delivery_Latency', input.Max_Delivery_Latency.toString(), output); -- if (input.Avg_Delivery_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Delivery_Latency', input.Avg_Delivery_Latency.toString(), output); -- if (input.Min_Delivery_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Delivery_Latency', input.Min_Delivery_Latency.toString(), output); -- if (input.Max_Fixed_Branch_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Fixed_Branch_Latency', input.Max_Fixed_Branch_Latency.toString(), output); -- if (input.Avg_Fixed_Branch_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Fixed_Branch_Latency', input.Avg_Fixed_Branch_Latency.toString(), output); -- if (input.Min_Fixed_Branch_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Fixed_Branch_Latency', input.Min_Fixed_Branch_Latency.toString(), output); -- if (input.Max_Variable_Branch_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Max_Variable_Branch_Latency', input.Max_Variable_Branch_Latency.toString(), output); -- if (input.Avg_Variable_Branch_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Avg_Variable_Branch_Latency', input.Avg_Variable_Branch_Latency.toString(), output); -- if (input.Min_Variable_Branch_Latency <> 0.0) thisModule.CreateXMLattr_StringValue('Min_Variable_Branch_Latency', input.Min_Variable_Branch_Latency.toString(), output); if (not input.Synchronization_Source.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Synchronization_Source', input.Synchronization_Source.name, output); } } -- ------- -- DRIVERS -- ------- --- --------- --- This rule... --- --------- rule Packet_Driver { from input : MAST2!Packet_Driver (not input.oclIsTypeOf(MAST2!Character_Packet_Driver or MAST2!RTEP_Packet_Driver)) to output : XML!Element ( name <- 'mast_mdl:Packet_Driver' -- parent <- -- children <- ) do { -- if (not input.Message_Segmentation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Message_Partitioning', input.Message_Segmentation.bool2Assertion, output); -- if (not input.High_Utilization_Mode.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('High_Utilization_Mode', input.High_Utilization_Mode.bool2Assertion, output); if (not input.Packet_Send_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Send_Operation', input.Packet_Send_Operation.name, output); if (not input.Packet_Receive_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Receive_Operation', input.Packet_Receive_Operation.name, output); if (not input.Packet_Server.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Server', input.Packet_Server.name, output); } } --- --------- --- This rule... --- --------- rule Character_Packet_Driver { from input : MAST2!Character_Packet_Driver to output : XML!Element ( name <- 'mast_mdl:Character_Packet_Driver' -- parent <- -- children <- ) do { -- if (not input.Message_Segmentation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Message_Partitioning', input.Message_Segmentation.bool2Assertion, output); -- if (not input.High_Utilization_Mode.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('High_Utilization_Mode', input.High_Utilization_Mode.bool2Assertion, output); -- if (not input.Character_Transmission_Time.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Character_Transmission_Time', input.Character_Transmission_Time.toString(), output); if (not input.Packet_Send_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Send_Operation', input.Packet_Send_Operation.name, output); if (not input.Packet_Receive_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Receive_Operation', input.Packet_Receive_Operation.name, output); if (not input.Packet_Server.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Server', input.Packet_Server.name, output); if (not input.Character_Send_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Character_Send_Operation', input.Character_Send_Operation.name, output); if (not input.Character_Receive_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Character_Receive_Operation', input.Character_Receive_Operation.name, output); if (not input.Character_Server.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Character_Server', input.Character_Server.name, output); } } --- --------- --- This rule... --- --------- rule RTEP_Packet_Driver { from input : MAST2!RTEP_Packet_Driver to output : XML!Element ( name <- 'mast_mdl:RTEP_Packet_Driver' -- parent <- -- children <- ) do { -- if (not input.Message_Segmentation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Message_Partitioning', input.Message_Segmentation.bool2Assertion, output); -- if (not input.High_Utilization_Mode.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('High_Utilization_Mode', input.High_Utilization_Mode.bool2Assertion, output); if (not input.Packet_Send_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Send_Operation', input.Packet_Send_Operation.name, output); if (not input.Packet_Receive_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Receive_Operation', input.Packet_Receive_Operation.name, output); if (not input.Packet_Server.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Server', input.Packet_Server.name, output); if (not input.Packet_ISR_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_ISR_Operation', input.Packet_ISR_Operation.name, output); if (not input.Token_Check_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Token_Check_Operation', input.Token_Check_Operation.name, output); if (not input.Token_Manage_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Token_Manage_Operation', input.Token_Manage_Operation.name, output); if (not input.Packet_Discard_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Discard_Operation', input.Packet_Discard_Operation.name, output); if (not input.Token_Retransmission_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Token_Retransmission_Operation', input.Token_Retransmission_Operation.name, output); if (not input.Packet_Retransmission_Operation.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Retransmission_Operation', input.Packet_Retransmission_Operation.name, output); if (not input.Packet_Interrupt_Server.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Interrupt_Server', input.Packet_Interrupt_Server, output); } } -- ---------- -- SCHEDULERS -- ---------- --- --------- --- This rule... --- --------- rule Primary_Scheduler { from input : MAST2!Primary_Scheduler to output : XML!Element ( name <- 'mast_mdl:Primary_Scheduler', -- parent <- children <- input.Policy ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); thisModule.CreateXMLattr_StringValue('Host', input.Host.name, output); } } --- --------- --- This rule... --- --------- rule Secondary_Scheduler { from input : MAST2!Secondary_Scheduler to output : XML!Element ( name <- 'mast_mdl:Secondary_Scheduler', -- parent <- children <- input.Policy ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); thisModule.CreateXMLattr_StringValue('Host', input.Host.name, output); } } -- ------------------- -- SCHEDULING POLICIES -- ------------------- --- --------- --- This rule... --- --------- rule Fixed_Priority_Policy { from input : MAST2!Fixed_Priority_Policy to output : XML!Element ( name <- 'mast_mdl:Fixed_Priority_Policy' -- parent <- -- children <- ) do { -- if (input.Worst_Context_Switch < 10000000000000000.0) -- if (not input.Worst_Context_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Worst_Context_Switch', input.Worst_Context_Switch.toString(), output); -- if (input.Avg_Context_Switch <> 0.0) -- if (not input.Avg_Context_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Context_Switch', input.Avg_Context_Switch.toString(), output); -- if (input.Best_Context_Switch <> 0.0) -- if (not input.Best_Context_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Best_Context_Switch', input.Best_Context_Switch.toString(), output); -- if (input.Max_Priority <> 32767) -- if (not input.Max_Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Priority', input.Max_Priority.toString(), output); -- if (input.Min_Priority <> 1) -- if (not input.Min_Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Min_Priority', input.Min_Priority.toString(), output); } } --- --------- --- This rule... --- --------- rule EDF_Policy { from input : MAST2!EDF_Policy to output : XML!Element ( name <- 'mast_mdl:EDF_Policy' -- parent <- -- children <- ) do { -- if (input.Worst_Context_Switch < 10000000000000000.0) -- if (not input.Worst_Context_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Worst_Context_Switch', input.Worst_Context_Switch.toString(), output); -- if (input.Avg_Context_Switch <> 0.0) -- if (not input.Avg_Context_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Context_Switch', input.Avg_Context_Switch.toString(), output); -- if (input.Best_Context_Switch <> 0.0) -- if (not input.Best_Context_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Best_Context_Switch', input.Best_Context_Switch.toString(), output); } } --- --------- --- This rule... --- --------- rule FP_Packet_Based_Policy { from input : MAST2!FP_Packet_Based_Policy to output : XML!Element ( name <- 'mast_mdl:FP_Packet_Based_Policy' -- parent <- -- children <- ) do { -- if (input.Packet_Overhead_Max_Size <> 0) -- if (not input.Packet_Overhead_Max_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Overhead_Max_Size', input.Packet_Overhead_Max_Size.toString(), output); -- if (input.Packet_Overhead_Avg_Size <> 0) -- if (not input.Packet_Overhead_Avg_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Overhead_Avg_Size', input.Packet_Overhead_Avg_Size.toString(), output); -- if (input.Packet_Overhead_Min_Size <> 0) -- if (not input.Packet_Overhead_Min_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Packet_Overhead_Min_Size', input.Packet_Overhead_Min_Size.toString(), output); -- if (input.Max_Priority <> 32767) thisModule.CreateXMLattr_StringValue('Max_Priority', input.Max_Priority.toString(), output); -- if (input.Min_Priority <> 1) thisModule.CreateXMLattr_StringValue('Min_Priority', input.Min_Priority.toString(), output); } } --- --------- --- This rule... --- --------- rule Timetable_Driven_Policy { from input : MAST2!Timetable_Driven_Policy to output : XML!Element ( name <- 'mast_mdl:Timetable_Driven_Policy', -- parent <- children <- input.Partition_Table ) do { if (not input.Worst_Context_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Worst_Context_Switch', input.Worst_Context_Switch.toString(), output); if (not input.Avg_Context_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Context_Switch', input.Avg_Context_Switch.toString(), output); if (not input.Best_Context_Switch.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Best_Context_Switch', input.Best_Context_Switch.toString(), output); if (not input.MAF.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('MAF', input.MAF.toString(), output); } } -- --------------------- -- SCHEDULABLE RESOURCES -- --------------------- --- --------- --- This rule... --- --------- rule Thread { from input : MAST2!Thread to output : XML!Element ( name <- 'mast_mdl:Thread', -- parent <- children <- input.Scheduling_Parameters, children <- if not input.Sychronization_Parameters.oclIsUndefined() then input.Sychronization_Parameters else OclUndefined endif ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); thisModule.CreateXMLattr_StringValue('Scheduler', input.Scheduler.name, output); } } --- --------- --- This rule... --- --------- rule Communication_Channel { from input : MAST2!Communication_Channel to output : XML!Element ( name <- 'mast_mdl:Communication_Channel', -- parent <- children <- input.Scheduling_Parameters ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); thisModule.CreateXMLattr_StringValue('Scheduler', input.Scheduler.name, output); } } --- --------- --- This rule... --- --------- rule Virtual_Schedulable_Resource { from input : MAST2!Virtual_Schedulable_Resource to output : XML!Element ( name <- 'mast_mdl:Virtual_Schedulable_Resource', -- parent <- children <- if not input.Scheduling_Parameters.oclIsUndefined() then input.Scheduling_Parameters else OclUndefined endif, children <- if not input.Sychronization_Parameters.oclIsUndefined() then input.Sychronization_Parameters else OclUndefined endif, children <- input.Resource_Reservation_Params ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); if (not input.Scheduler.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Scheduler', input.Scheduler.name, output); } } --- --------- --- This rule... --- --------- rule Virtual_Communication_Channel { from input : MAST2!Virtual_Communication_Channel to output : XML!Element ( name <- 'mast_mdl:Virtual_Communication_Channel', -- parent <- children <- if not input.Scheduling_Parameters.oclIsUndefined() then input.Scheduling_Parameters else OclUndefined endif, children <- input.Resource_Reservation_Params ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); if (not input.Scheduler.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Scheduler', input.Scheduler.name, output); } } -- ------------ -- SYNCH PARAMS -- ------------ --- --------- --- This rule... --- --------- rule SRP_Params { from input : MAST2!SRP_Params to output : XML!Element ( name <- 'mast_mdl:SRP_Params' -- parent <- -- children <- ) do { -- if (input.Preemption_Level <> 1) -- if (not input.Preemption_Level.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preemption_Level', input.Preemption_Level.toString(), output); -- if (input.Preassigned) -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); } } -- ----------------- -- SCHEDULING PARAMS -- ----------------- --- --------- --- This rule... --- --------- rule Interrupt_FP_Params { from input : MAST2!Interrupt_FP_Params to output : XML!Element ( name <- 'mast_mdl:Interrupt_FP_Params' -- parent <- -- children <- ) do { -- if (input.Priority <> 1) -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); } } --- --------- --- This rule... --- --------- rule Fixed_Priority_Params { from input : MAST2!Fixed_Priority_Params to output : XML!Element ( name <- 'mast_mdl:Fixed_Priority_Params' -- parent <- -- children <- ) do { -- if (input.Priority <> 1) -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); } } --- --------- --- This rule... --- --------- rule Non_Preemptible_FP_Params { from input : MAST2!Non_Preemptible_FP_Params to output : XML!Element ( name <- 'mast_mdl:Non_Preemptible_FP_Params' -- parent <- -- children <- ) do { -- if (input.Priority <> 1) -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); } } --- --------- --- This rule... --- --------- rule Polling_Params { from input : MAST2!Polling_Params to output : XML!Element ( name <- 'mast_mdl:Polling_Params' -- parent <- -- children <- ) do { -- if (input.Priority <> 1) -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); -- if (input.Polling_Period <> 0.0) -- if (not input.Polling_Period.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Polling_Period', input.Polling_Period.toString(), output); -- if (input.Polling_Worst_Overhead <> 0.0) -- if (not input.Polling_Worst_Overhead.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Polling_Worst_Overhead', input.Polling_Worst_Overhead.toString(), output); -- if (input.Polling_Avg_Overhead <> 0.0) -- if (not input.Polling_Avg_Overhead.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Polling_Avg_Overhead', input.Polling_Avg_Overhead.toString(), output); -- if (input.Polling_Best_Overhead <> 0.0) -- if (not input.Polling_Best_Overhead.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Polling_Best_Overhead', input.Polling_Best_Overhead.toString(), output); } } --- --------- --- This rule... --- --------- rule Periodic_Server_Params { from input : MAST2!Periodic_Server_Params (not input.oclIsTypeOf(MAST2!Sporadic_Server_Params)) to output : XML!Element ( name <- 'mast_mdl:Periodic_Server_Params' -- parent <- -- children <- ) do { -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); -- if (not input.Replenishment_Period.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Replenishment_Period', input.Replenishment_Period.toString(), output); -- if (not input.Initial_Capacity.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Initial_Capacity', input.Initial_Capacity.toString(), output); } } --- --------- --- This rule... --- --------- rule Sporadic_Server_Params { from input : MAST2!Sporadic_Server_Params to output : XML!Element ( name <- 'mast_mdl:Sporadic_Server_Params' -- parent <- -- children <- ) do { -- if (input.Priority <> 1) -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); -- if (input.Replenishment_Period <> 0.0) -- if (not input.Replenishment_Period.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Replenishment_Period', input.Replenishment_Period.toString(), output); -- if (input.Initial_Capacity <> 0.0) -- if (not input.Initial_Capacity.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Initial_Capacity', input.Initial_Capacity.toString(), output); -- if (input.Background_Priority <> 1) -- if (not input.Background_Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Background_Priority', input.Background_Priority.toString(), output); -- if (input.Max_Pending_Replenishments <> 1) -- if (not input.Max_Pending_Replenishments.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Pending_Replenishments', input.Max_Pending_Replenishments.toString(), output); } } --- --------- --- This rule... --- --------- rule Periodic_Server_Comm_Params { from input : MAST2!Periodic_Server_Comm_Params (not input.oclIsTypeOf(MAST2!Sporadic_Server_Comm_Params)) to output : XML!Element ( name <- 'mast_mdl:Periodic_Server_Comm_Params' -- parent <- -- children <- ) do { -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); -- if (not input.Replenishment_Period.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Replenishment_Period', input.Replenishment_Period.toString(), output); -- if (not input.Initial_Capacity.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Initial_Capacity', input.Initial_Capacity.toString(), output); } } --- --------- --- This rule... --- --------- rule Sporadic_Server_Comm_Params { from input : MAST2!Sporadic_Server_Comm_Params to output : XML!Element ( name <- 'mast_mdl:Sporadic_Server_Comm_Params' -- parent <- -- children <- ) do { -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); -- if (not input.Replenishment_Period.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Replenishment_Period', input.Replenishment_Period.toString(), output); -- if (not input.Initial_Capacity.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Initial_Capacity', input.Initial_Capacity.toString(), output); -- if (not input.Background_Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Background_Priority', input.Background_Priority.toString(), output); -- if (not input.Max_Pending_Replenishments.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Pending_Replenishments', input.Max_Pending_Replenishments.toString(), output); } } --- --------- --- This rule... --- --------- rule EDF_Params { from input : MAST2!EDF_Params to output : XML!Element ( name <- 'mast_mdl:EDF_Params' -- parent <- -- children <- ) do { -- if (input.Deadline < 1000000000000000000.0) -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); } } --- --------- --- This rule... --- --------- abstract rule Resource_Reservation_Params { from input : MAST2!Resource_Reservation_Params to output : XML!Element ( -- parent <- ) do { if (input.Preassigned = true) thisModule.CreateXMLattr_StringValue('Preassigned', 'YES', output); } } --- --------- --- This rule... --- --------- abstract rule Virtual_Periodic_Replenishment_Params extends Resource_Reservation_Params{ from input : MAST2!Virtual_Periodic_Replenishment_Params to output : XML!Element () do { -- if (input.Deadline <> thisModule.maxTime) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); -- if (input.Budget <> 0.0) thisModule.CreateXMLattr_StringValue('Budget', input.Budget.toString(), output); -- if (input.Period <> thisModule.maxTime) thisModule.CreateXMLattr_StringValue('Period', input.Period.toString(), output); } } --- --------- --- This rule... --- --------- rule Virtual_Periodic_Server_Params extends Virtual_Periodic_Replenishment_Params{ from input : MAST2!Virtual_Periodic_Server_Params to output : XML!Element ( name <- 'mast_mdl:Virtual_Periodic_Server_Params' ) } --- --------- --- This rule... --- --------- rule Virtual_Deferrable_Server_Params extends Virtual_Periodic_Replenishment_Params{ from input : MAST2!Virtual_Deferrable_Server_Params to output : XML!Element ( name <- 'mast_mdl:Virtual_Deferrable_Server_Params' ) } --- --------- --- This rule... --- --------- rule Virtual_Sporadic_Server_Params extends Virtual_Periodic_Replenishment_Params{ from input : MAST2!Virtual_Sporadic_Server_Params to output : XML!Element ( name <- 'mast_mdl:Virtual_Sporadic_Server_Params' ) } --- --------- --- This rule... --- --------- abstract rule Virtual_Periodic_Replenishment_Comm_Params extends Resource_Reservation_Params{ from input : MAST2!Virtual_Periodic_Replenishment_Comm_Params to output : XML!Element () do { -- if (input.Deadline <> thisModule.maxTime) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); -- if (input.Budget <> 0) thisModule.CreateXMLattr_StringValue('Budget', input.Budget.toString(), output); -- if (input.Period <> thisModule.maxTime) thisModule.CreateXMLattr_StringValue('Period', input.Period.toString(), output); } } --- --------- --- This rule... --- --------- rule Virtual_Periodic_Comm_Params extends Virtual_Periodic_Replenishment_Comm_Params{ from input : MAST2!Virtual_Periodic_Comm_Params to output : XML!Element ( name <- 'mast_mdl:Virtual_Periodic_Comm_Params' ) } --- --------- --- This rule... --- --------- rule Virtual_Deferrable_Comm_Params extends Virtual_Periodic_Replenishment_Comm_Params{ from input : MAST2!Virtual_Deferrable_Comm_Params to output : XML!Element ( name <- 'mast_mdl:Virtual_Deferrable_Comm_Params' ) } --- --------- --- This rule... --- --------- rule Virtual_Sporadic_Comm_Params extends Virtual_Periodic_Replenishment_Params{ from input : MAST2!Virtual_Sporadic_Comm_Params to output : XML!Element ( name <- 'mast_mdl:Virtual_Sporadic_Comm_Params' ) } --- --------- --- This rule... --- --------- rule Virtual_Token_Bucket_Comm_Params extends Resource_Reservation_Params{ from input : MAST2!Virtual_Token_Bucket_Comm_Params to output : XML!Element ( name <- 'mast_mdl:Virtual_Token_Bucket_Comm_Params' ) do { -- if (input.Budget <> 0) thisModule.CreateXMLattr_StringValue('Budget', input.Budget.toString(), output); -- if (input.Max_Throughput <> thisModule.maxThroughput) thisModule.CreateXMLattr_StringValue('Max_Throughput', input.Max_Throughput.toString(), output); } } -- ------- -- MUTEXES -- ------- --- --------- --- This rule... --- --------- rule Priority_Inheritance_Mutex { from input : MAST2!Priority_Inheritance_Mutex to output : XML!Element ( name <- 'mast_mdl:Priority_Inheritance_Mutex' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); } } --- --------- --- This rule... --- --------- rule Immediate_Ceiling_Mutex { from input : MAST2!Immediate_Ceiling_Mutex to output : XML!Element ( name <- 'mast_mdl:Immediate_Ceiling_Mutex' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Ceiling <> 32767) -- if (not input.Ceiling.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Ceiling', input.Ceiling.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); } } --- --------- --- This rule... --- --------- rule SRP_Mutex { from input : MAST2!SRP_Mutex to output : XML!Element ( name <- 'mast_mdl:SRP_Mutex' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (input.Preemption_Level <> 32767) -- if (not input.Preemption_Level.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preemption_Level', input.Preemption_Level.toString(), output); -- if (not input.Preassigned.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Preassigned', input.Preassigned.bool2Assertion, output); } } -- ---------- -- OPERATIONS -- ---------- --- --------- --- This rule... --- --------- rule Simple_Operation { from input : MAST2!Simple_Operation to output : XML!Element ( name <- 'mast_mdl:Simple_Operation', -- parent <- children <- if not input.Overridden_Sched_Parameters.oclIsUndefined() then input.Overridden_Sched_Parameters else OclUndefined endif ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (not input.Worst_Case_Execution_Time.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Worst_Case_Execution_Time', input.Worst_Case_Execution_Time.toString(), output); -- if (not input.Avg_Case_Execution_Time.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Case_Execution_Time', input.Avg_Case_Execution_Time.toString(), output); -- if (not input.Best_Case_Execution_Time.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Best_Case_Execution_Time', input.Best_Case_Execution_Time.toString(), output); for (mutex in input.Mutex_List) { thisModule.ContributeXMLelem_OfType_Model_Elem_Ref('Mutex', output, mutex.name); } for (mutex in input.Mutex_To_Lock_List) { thisModule.ContributeXMLelem_OfType_Model_Elem_Ref('Mutex_To_Lock', output, mutex.name); } for (mutex in input.Mutex_To_Unlock_List) { thisModule.ContributeXMLelem_OfType_Model_Elem_Ref('Mutex_To_Unlock', output, mutex.name); } } } --- --------- --- This rule... --- --------- rule Composite_Operation { from input : MAST2!Composite_Operation (not input.oclIsTypeOf(MAST2!Enclosing_Operation)) to output : XML!Element ( name <- 'mast_mdl:Composite_Operation', -- parent <- children <- if not input.Overridden_Sched_Parameters.oclIsUndefined() then input.Overridden_Sched_Parameters else OclUndefined endif ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); for (oper in input.Operation_List) { thisModule.ContributeXMLelem_OfType_Model_Elem_Ref('Operation', output, oper.name); } } } --- --------- --- This rule... --- --------- rule Enclosing_Operation { from input : MAST2!Enclosing_Operation to output : XML!Element ( name <- 'mast_mdl:Enclosing_Operation', -- parent <- children <- if not input.Overridden_Sched_Parameters.oclIsUndefined() then input.Overridden_Sched_Parameters else OclUndefined endif ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (not input.Worst_Case_Execution_Time.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Worst_Case_Execution_Time', input.Worst_Case_Execution_Time.toString(), output); -- if (not input.Avg_Case_Execution_Time.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Case_Execution_Time', input.Avg_Case_Execution_Time.toString(), output); -- if (not input.Best_Case_Execution_Time.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Best_Case_Execution_Time', input.Best_Case_Execution_Time.toString(), output); for (oper in input.Operation_List) { thisModule.ContributeXMLelem_OfType_Model_Elem_Ref('Operation', output, oper.name); } } } --- --------- --- This rule... --- --------- rule Message { from input : MAST2!Message to output : XML!Element ( name <- 'mast_mdl:Message' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (not input.Max_Message_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Message_Size', input.Max_Message_Size.toString(), output); -- if (not input.Avg_Message_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Message_Size', input.Avg_Message_Size.toString(), output); -- if (not input.Min_Message_Size.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Min_Message_Size', input.Min_Message_Size.toString(), output); } } --- --------- --- This rule... --- --------- rule Composite_Message { from input : MAST2!Composite_Message to output : XML!Element ( name <- 'mast_mdl:Composite_Message' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); for (mssg in input.Message_List) { thisModule.ContributeXMLelem_OfType_Model_Elem_Ref('Message', output, mssg.name); } } } -- ---------------- -- OVERRIDEN PARAMS -- ---------------- --- --------- --- This rule... --- --------- rule Overridden_Fixed_Priority { from input : MAST2!Overridden_Fixed_Priority to output : XML!Element ( name <- 'mast_mdl:Overriden_Fixed_Priority' -- parent <- -- children <- ) do { -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); } } --- --------- --- This rule... --- --------- rule Overridden_Permanent_FP { from input : MAST2!Overridden_Permanent_FP to output : XML!Element ( name <- 'mast_mdl:Overriden_Permanent_FP' -- parent <- -- children <- ) do { -- if (not input.Priority.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Priority', input.Priority.toString(), output); } } --- --------- --- This rule... --- --------- rule Overridden_Deadline { from input : MAST2!Overridden_Deadline to output : XML!Element ( name <- 'mast_mdl:Overriden_Deadline' -- parent <- -- children <- ) do { -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); } } -- ----- -- E2EFs -- ----- --- --------- --- This rule... --- --------- rule Regular_End_To_End_Flow { from input : MAST2!Regular_End_To_End_Flow to output : XML!Element ( name <- 'mast_mdl:Regular_End_To_End_Flow', -- parent <- children <- input.Flow_Element_List ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); } } -- --------------- -- WORKLOAD EVENTS -- --------------- --- --------- --- This rule... --- --------- rule Singular_Event { from input : MAST2!Singular_Event to output : XML!Element ( name <- 'mast_mdl:Singular_Event' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (not input.Phase.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Phase', input.Phase.toString(), output); if (not input.Timer.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Timer', input.Timer.name, output); } } --- --------- --- This rule... --- --------- rule Periodic_Event { from input : MAST2!Periodic_Event to output : XML!Element ( name <- 'mast_mdl:Periodic_Event' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (not input.Phase.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Phase', input.Phase.toString(), output); -- if (not input.Period.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Period', input.Period.toString(), output); -- if (not input.Max_Jitter.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Jitter', input.Max_Jitter.toString(), output); -- if (not input.Synchronized.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Synchronized', input.Synchronized.bool2Assertion, output); if (not input.Timer.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Timer', input.Timer.name, output); } } --- --------- --- This rule... --- --------- rule Unbounded_Event { from input : MAST2!Unbounded_Event to output : XML!Element ( name <- 'mast_mdl:Unbounded_Event' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (not input.Distribution.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Distribution', input.Distribution.bool2Assertion, output); -- if (not input.Avg_Interarrival.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Interarrival', input.Avg_Interarrival.toString(), output); } } --- --------- --- This rule... --- --------- rule Sporadic_Event { from input : MAST2!Sporadic_Event to output : XML!Element ( name <- 'mast_mdl:Sporadic_Event' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (not input.Distribution.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Distribution', input.Distribution.bool2Assertion, output); -- if (not input.Avg_Interarrival.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Interarrival', input.Avg_Interarrival.toString(), output); -- if (not input.Min_Interarrival.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Min_Interarrival', input.Min_Interarrival.toString(), output); } } --- --------- --- This rule... --- --------- rule Bursty_Event { from input : MAST2!Bursty_Event to output : XML!Element ( name <- 'mast_mdl:Bursty_Event' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); -- if (not input.Distribution.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Distribution', input.Distribution.bool2Assertion, output); -- if (not input.Avg_Interarrival.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Avg_Interarrival', input.Avg_Interarrival.toString(), output); -- if (not input.Bound_Interval.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Bound_Interval', input.Bound_Interval.toString(), output); -- if (not input.Max_Arrivals.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Arrivals', input.Max_Arrivals.toString(), output); } } -- -------------- -- INTERNAL EVENT -- -------------- --- rule Internal_Event { from input : MAST2!Internal_Event to output : XML!Element ( name <- 'mast_mdl:Internal_Event', -- parent <- children <- input.Observer_List ) do { thisModule.CreateXMLattr_StringValue('Name', input.name, output); } } -- --------- -- OBSERVERS -- --------- --- --------- --- This rule... --- --------- rule Queue_Size_Req { from input : MAST2!Queue_Size_Req to output : XML!Element ( name <- 'mast_mdl:Queue_Size_Req' -- parent <- -- children <- ) do { -- if (not input.Max_Events.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Events', input.Max_Events.toString(), output); } } --- --------- --- This rule... --- --------- rule Local_Max_Miss_Ratio { from input : MAST2!Local_Max_Miss_Ratio to output : XML!Element ( name <- 'mast_mdl:Local_Max_Miss_Ratio' -- parent <- -- children <- ) do { -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); -- if (not input.Ratio.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Ratio', input.Ratio.toString(), output); } } --- --------- --- This rule... --- --------- rule Global_Max_Miss_Ratio { from input : MAST2!Global_Max_Miss_Ratio to output : XML!Element ( name <- 'mast_mdl:Global_Max_Miss_Ratio' -- parent <- -- children <- ) do { -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); -- if (not input.Ratio.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Ratio', input.Ratio.toString(), output); thisModule.CreateXMLattr_StringValue('Referenced_Event', input.Referenced_Event.name, output); } } --- --------- --- This rule... --- --------- rule Soft_Local_Deadline { from input : MAST2!Soft_Local_Deadline to output : XML!Element ( name <- 'mast_mdl:Soft_Local_Deadline' -- parent <- -- children <- ) do { -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); } } --- --------- --- This rule... --- --------- rule Soft_Global_Deadline { from input : MAST2!Soft_Global_Deadline to output : XML!Element ( name <- 'mast_mdl:Soft_Global_Deadline' -- parent <- -- children <- ) do { -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); thisModule.CreateXMLattr_StringValue('Referenced_Event', input.Referenced_Event.name, output); } } --- --------- --- This rule... --- --------- rule Soft_Global_Relative_Deadline { from input : MAST2!Soft_Global_Relative_Deadline to output : XML!Element ( name <- 'mast_mdl:Soft_Global_Relative_Deadline' -- parent <- -- children <- ) do { -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); thisModule.CreateXMLattr_StringValue('Referenced_Event', input.Referenced_Event.name, output); } } --- --------- --- This rule... --- --------- rule Hard_Local_Deadline { from input : MAST2!Hard_Local_Deadline to output : XML!Element ( name <- 'mast_mdl:Hard_Local_Deadline' -- parent <- -- children <- ) do { -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); } } --- --------- --- This rule... --- --------- rule Hard_Global_Deadline { from input : MAST2!Hard_Global_Deadline to output : XML!Element ( name <- 'mast_mdl:Hard_Global_Deadline' -- parent <- -- children <- ) do { -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); thisModule.CreateXMLattr_StringValue('Referenced_Event', input.Referenced_Event.name, output); } } --- --------- --- This rule... --- --------- rule Hard_Global_Relative_Deadline { from input : MAST2!Hard_Global_Relative_Deadline to output : XML!Element ( name <- 'mast_mdl:Hard_Global_Relative_Deadline' -- parent <- -- children <- ) do { -- if (not input.Deadline.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Deadline', input.Deadline.toString(), output); thisModule.CreateXMLattr_StringValue('Referenced_Event', input.Referenced_Event.name, output); } } --- --------- --- This rule... --- --------- rule Max_Output_Jitter_Req { from input : MAST2!Max_Output_Jitter_Req to output : XML!Element ( name <- 'mast_mdl:Max_Output_Jitter_Req' -- parent <- -- children <- ) do { -- if (not input.Max_Output_Jitter.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Max_Output_Jitter', input.Max_Output_Jitter.toString(), output); thisModule.CreateXMLattr_StringValue('Referenced_Event', input.Referenced_Event.name, output); } } --- --------- --- This rule... --- --------- rule Composite_Observer { from input : MAST2!Composite_Observer to output : XML!Element ( name <- 'mast_mdl:Composite_Observer', -- parent <- children <- input.Observer_List ) } -- -------------- -- EVENT HANDLERS -- -------------- --- --------- --- This rule... --- --------- rule Step { from input : MAST2!Step to output : XML!Element ( name <- 'mast_mdl:Step' -- parent <- -- children <- ) do { -- if (not input.Hold_Schedulable_Resource.oclIsUndefined() -- = true) thisModule.CreateXMLattr_StringValue('Hold_Schedulable_Resource', input.Hold_Schedulable_Resource.bool2Assertion, output); thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); thisModule.CreateXMLattr_StringValue('Output_Event', input.Output_Event.name, output); thisModule.CreateXMLattr_StringValue('Step_Operation', input.Step_Operation.name, output); thisModule.CreateXMLattr_StringValue('Step_Schedulable_Resource', input.Step_Schedulable_Resource.name, output); } } --- --------- --- This rule... --- --------- rule Fork { from input : MAST2!Fork using { outputEventNames : String = ''; --input.Output_Event_List -> collect(o | outputEventNames <- outputEventNames + o.name + ' '); } to output : XML!Element ( name <- 'mast_mdl:Fork' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); for (outputEvent in input.Output_Event_List) { outputEventNames <- outputEventNames + outputEvent.name + ' '; } thisModule.CreateXMLattr_StringValue('Output_Events_List', outputEventNames.trim(), output); } } --- --------- --- This rule... --- --------- rule Join { from input : MAST2!Join using { inputEventNames : String = ''; } to output : XML!Element ( name <- 'mast_mdl:Join' -- parent <- -- children <- ) do { for (inputEvent in input.Input_Event_List) { inputEventNames <- inputEventNames + inputEvent.name + ' '; } thisModule.CreateXMLattr_StringValue('Input_Events_List', inputEventNames.trim(), output); thisModule.CreateXMLattr_StringValue('Output_Event', input.Output_Event.name, output); } } --- --------- --- This rule... --- --------- rule Merge { from input : MAST2!Merge using { inputEventNames : String = ''; } to output : XML!Element ( name <- 'mast_mdl:Merge' -- parent <- -- children <- ) do { for (inputEvent in input.Input_Event_List) { inputEventNames <- inputEventNames + inputEvent.name + ' '; } thisModule.CreateXMLattr_StringValue('Input_Events_List', inputEventNames.trim(), output); thisModule.CreateXMLattr_StringValue('Output_Event', input.Output_Event.name, output); } } --- --------- --- This rule... --- --------- rule Rate_Divisor { from input : MAST2!Rate_Divisor to output : XML!Element ( name <- 'mast_mdl:Rate_Divisor' -- parent <- -- children <- ) do { -- if (not input.Rate_Factor.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Rate_Factor', input.Rate_Factor.toString(), output); thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); thisModule.CreateXMLattr_StringValue('Output_Event', input.Output_Event.name, output); } } --- --------- --- This rule... --- --------- rule Delay { from input : MAST2!Delay (not input.oclIsTypeOf(MAST2!Offset)) to output : XML!Element ( name <- 'mast_mdl:Delay' -- parent <- -- children <- ) do { -- if (not input.Delay_Max_Interval.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Delay_Max_Interval', input.Delay_Max_Interval.toString(), output); -- if (not input.Delay_Avg_Interval.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Delay_Avg_Interval', input.Delay_Avg_Interval.toString(), output); -- if (not input.Delay_Best_Interval.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Delay_Min_Interval', input.Delay_Best_Interval.toString(), output); thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); thisModule.CreateXMLattr_StringValue('Output_Event', input.Output_Event.name, output); if (not input.Timer.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Timer', input.Timer.name, output); } } --- --------- --- This rule... --- --------- rule Offset { from input : MAST2!Offset to output : XML!Element ( name <- 'mast_mdl:Offset' -- parent <- -- children <- ) do { -- if (not input.Delay_Max_Interval.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Delay_Max_Interval', input.Delay_Max_Interval.toString(), output); -- if (not input.Delay_Avg_Interval.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Delay_Avg_Interval', input.Delay_Avg_Interval.toString(), output); -- if (not input.Delay_Best_Interval.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Delay_Min_Interval', input.Delay_Best_Interval.toString(), output); thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); thisModule.CreateXMLattr_StringValue('Output_Event', input.Output_Event.name, output); if (not input.Timer.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Timer', input.Timer.name, output); thisModule.CreateXMLattr_StringValue('Referenced_Event', input.Referenced_Event.name, output); } } --- --------- --- This rule... --- --------- rule Branch { from input : MAST2!Branch using { outputEventNames : String = ''; } to output : XML!Element ( name <- 'mast_mdl:Branch' -- parent <- -- children <- ) do { -- if (not input.Delivery_Policy.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Delivery_Policy', input.Delivery_Policy.toString(), output); for (weight in input.Output_Weight_List) { thisModule.Output_Weight(weight, output); } thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); for (outputEvent in input.Output_Event_List) { outputEventNames <- outputEventNames + outputEvent.name + ' '; } thisModule.CreateXMLattr_StringValue('Output_Events_List', outputEventNames.trim(), output); } } --- --------- --- This rule... --- --------- rule Queried_Branch { from input : MAST2!Queried_Branch using { outputEventNames : String = ''; } to output : XML!Element ( name <- 'mast_mdl:Queried_Branch' -- parent <- -- children <- ) do { -- if (not input.Request_Policy.oclIsUndefined()) thisModule.CreateXMLattr_StringValue('Request_Policy', input.Request_Policy.toString(), output); thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); for (outputEvent in input.Output_Event_List) { outputEventNames <- outputEventNames + outputEvent.name + ' '; } thisModule.CreateXMLattr_StringValue('Output_Events_List', outputEventNames.trim(), output); } } --- --------- --- This rule... --- --------- rule Message_Fork { from input : MAST2!Message_Fork using { outputEventNames : String = ''; } to output : XML!Element ( name <- 'mast_mdl:Message_Fork' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); for (outputEvent in input.Output_Event_List) { outputEventNames <- outputEventNames + outputEvent.name + ' '; } thisModule.CreateXMLattr_StringValue('Output_Events_List', outputEventNames.trim(), output); thisModule.CreateXMLattr_StringValue('Switch', input.Switch.name, output); } } --- --------- --- This rule... --- --------- rule Message_Delivery { from input : MAST2!Message_Delivery to output : XML!Element ( name <- 'mast_mdl:Message_Delivery' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); thisModule.CreateXMLattr_StringValue('Output_Event', input.Output_Event.name, output); thisModule.CreateXMLattr_StringValue('Switch', input.Switch.name, output); } } --- --------- --- This rule... --- --------- rule Message_Branch { from input : MAST2!Message_Branch using { outputEventNames : String = ''; } to output : XML!Element ( name <- 'mast_mdl:Message_Branch' -- parent <- -- children <- ) do { thisModule.CreateXMLattr_StringValue('Input_Event', input.Input_Event.name, output); for (outputEvent in input.Output_Event_List) { outputEventNames <- outputEventNames + outputEvent.name + ' '; } thisModule.CreateXMLattr_StringValue('Output_Events_List', outputEventNames.trim(), output); thisModule.CreateXMLattr_StringValue('Switch', input.Switch.name, output); } } -- **************************************************************************** -- ************************* CALLED RULES ************************************* -- **************************************************************************** --- --------- --- This rule... --- --------- rule CreateXMLattr_StringValue(attrName : String, attrValue : String, attrParent : XML!Element) { to attr : XML!Attribute ( name <- attrName, value <- attrValue, parent <- attrParent ) do { attrParent.children <- attr; } } --- --------- --- This rule... --- --------- rule ContributeXMLelem_OfType_Model_Elem_Ref (localName : String, parent : XML!Element, modelElemName : String) { to output1 : XML!Element ( name <- 'mast_mdl:' + localName, parent <- parent, children <- output2 ), output2 : XML!Attribute ( name <- 'Name', value <- modelElemName, parent <- output1 ) do { parent.children <- output1; } } --- --------- --- This rule... --- --------- rule Output_Weight (weight : Real, parentElem : XML!Element) { to output1 : XML!Element ( name <- 'mast_mdl:Output_Weight', parent <- parentElem, children <- output2 ), output2 : XML!Attribute ( name <- 'Weight', value <- weight.toString(), parent <- output1 ) do { parentElem.children <- output1; } }